const showError = (txt) => {
  window.ELEMENT.Message({
    showClose: true,
    message: txt,
    type: 'error',
  });
};

class PluginFactory {
  name = 'zhansan';

  constructor() {
    window.Asc.plugin.init = function () {};
    console.log('constructor');
  }
  //
  test() {
    // window.Asc.plugin.executeMethod('GetCurrentContentControl', [], function (data) {
    //   debugger;
    // });

    // window.Asc.plugin.executeMethod(
    //   'AddComment',
    //   [
    //     {
    //       UserName: '测试1',
    //       Text: '测试1文本',
    //       Time: '1662737941471',
    //       Solved: true,
    //       // Replies: [
    //       //   {
    //       //     UserName: 'Mark Potato',
    //       //     Text: 'reply 1',
    //       //     Time: '1662740895892',
    //       //     Solved: false,
    //       //   },
    //       // ],
    //     },
    //   ],
    //   function (comment) {
    //     debugger;
    //     console.log(comment);
    //   },
    // );
    // window.Asc.plugin.executeMethod('MoveToComment', ['1_631']);

    window.Asc.plugin.callCommand(
      () => {
        const oDocument = Api.GetDocument();
        // const oRange = oDocument.GetRangeBySelect();
        // oRange.AddBookmark('BookmarTest');
        // const book = oDocument.GetBookmarkRange('BookmarTest');
        // oDocument.GetBookmarkRange("Bookmark222");
        const aBookmarks = oDocument.GetAllBookmarksNames();
        const oRange = oDocument.GetBookmarkRange('c1');
        const txt = oRange.Text;
        // debugger
        // oRange.Delete();
        // oRange.AddText('【${txt}】');
        // // oRange.WrapInMailMergeField();
        // // console.log(oRange)
        // oRange.AddText("【哈啊哈】",'before');
        // // oRange.AddText("】",'after');
        // Api.ReplaceTextSmart([txt], "[---HHAA---]", "");
        oDocument.SearchAndReplace({ searchString: txt, replaceString: '[---HHAA---]' });
        oRange.SetBold(true);
        // oRange.SetHighlight("gray");
        oRange.Select();

        // oDocument
        // const bookStr = JSON.stringify(aBookmarks);
        // console.log('AddBookmark finish.');
        // return book;
      },
      false,
      true,
      (txt) => {
        console.log('AddBookmark finish.');
        // debugger;
      },
    );

    // window.Asc.plugin.executeMethod('GetCurrentContentControlPr', [], function (obj) {
    //   window.Asc.plugin.currentContentControl = obj;
    //   var controlTag = obj ? obj.Tag : '';
    //   debugger;
    // });
  }

  addUrlLink = () => {
    window.Asc.plugin.callCommand(() => {
      const oDocument = Api.GetDocument();
      const oParagraph = Api.CreateParagraph();
      const oHyperlink = Api.CreateHyperlink('https://bing.com', '测试 链接');
      oParagraph.AddElement(oHyperlink);
      // oDocument.Push(oParagraph);
      oDocument.InsertContent([oParagraph]);
    });
  };
  getCurrentTxt = async () => {
    return new Promise((resolve, reject) => {
      window.Asc.plugin.executeMethod(
        'GetSelectedText',
        [
          {
            Numbering: false,
            Math: false,
            TableCellSeparator: '\n',
            ParaSeparator: '\n',
            TabSymbol: String.fromCharCode(9),
          },
        ],
        function (data) {
          resolve(data);
        },
      );
    });

    // const aAddinFieldData = [{ FieldId: '1', Value: 'Addin №1', Content: 'This is the first addin field' }];
    // window.Asc.plugin.executeMethod('UpdateAddinFields', [aAddinFieldData]);

    // window.Asc.plugin.executeMethod('GetAllComments', null, function (comment) {
    //   debugger
    //   console.log(comment);
    // });

    //    window.Asc.plugin.callCommand(
    //      function () {
    //        try {
    //          const oDocument = Api.GetDocument();
    //          const oRange = oDocument.GetRangeBySelect();
    //          oRange.AddBookmark('BookmarkKL...');
    //          // debugger
    //          // oDocument.GetBookmarkRange("Bookmark222");
    //          const aBookmarks = oDocument.GetAllBookmarksNames();
    //          const bookStr = JSON.stringify(aBookmarks);
    //          console.log('AddBookmark finish.');
    //          return bookStr;
    //        } catch (error) {
    //          return JSON.stringify(error);
    //        }
    //      },
    //      false,
    //      true,
    //      (txt) => {
    //        console.log('AddBookmark finish.');
    //        debugger;
    //      },
    //    );
  };

  addOffice = async () => {
    const keyId = 'add_office';
    const selectTxt = await this.getCurrentTxt();
    if (!selectTxt) {
      showError('请选择文本');
      return;
    }
    await axios
      .post('/api/v1/document/addMockList', {
        key: keyId,
        params: [
          {
            title: selectTxt,
          },
        ],
      })
      .then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        showError('添加事务错误');
      });
    const res = await axios({
      method: 'get',
      url: '/api/v1/document/getMockList',
      params: { key: keyId },
    });
    return res.data.data;
  };

  addOfficeItem() {}

  addOfficeItemSelect() {}

  addOfficeItemInput() {}

  addOfficeItemDescribe() {}
}

export { PluginFactory };
